package Dao;

import Modelo.Loja;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Roger
 */
public class LojaDAO {
    public Boolean Cadastrar(Loja obj) {

        Boolean retorno = false;

        String sql = "INSERT INTO loja(nome,logo,recomendacao) VALUES (?,?,?)";
        PreparedStatement pst = Conexao.getPreparedStatement(sql);

        try {
            pst.setString(1, obj.getNome());
            pst.setBytes(2, obj.getLogo());
            pst.setBoolean(3, obj.getRecomendada());
            

            Integer resultado = pst.executeUpdate();
            if (resultado > 0) {
                retorno = true;
            } else {
                retorno = false;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao acessar o banco");
            return false;
        }
        return retorno;
    }
    public Boolean Alterar(Loja obj) {

        Boolean retorno = false;

        String sql = "UPDATE loja "
                + "   SET  nome=?, logo=?, recomendacao=? "
                + "   WHERE codloja=?";
        PreparedStatement pst = Conexao.getPreparedStatement(sql);

        try {
             pst.setString(1, obj.getNome());
             pst.setBytes(2, obj.getLogo());
             pst.setBoolean(3, obj.getRecomendada());
            
            
            Integer resultado = pst.executeUpdate();
            if (resultado > 0) {
                retorno = true;
            } else {
                retorno = false;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao acessar o banco");
            return false;
        }
        return retorno;
    }
    public List<Loja> Listar() {
        List<Loja> lista = new ArrayList<Loja>();
        String sql = "SELECT * FROM loja WHERE recomendacao = true";
           PreparedStatement psm = Conexao.getPreparedStatement(sql);
           try {
               ResultSet resultado = psm.executeQuery();
               
               while(resultado.next()) {
                   Loja obj = new Loja();
                   obj.setCodloja(resultado.getInt("codloja"));
                   obj.setNome(resultado.getString("nome"));
                   obj.setLogo(resultado.getBytes("logo"));
                   obj.setRecomendada(resultado.getBoolean("recomendacao"));
                   lista.add(obj);
               }
               
           } catch(SQLException ex) {
               lista = null;
           }
           
        return lista;
    }
      public List<Loja> Listar(String filtro) {
        List<Loja> lista = new ArrayList<Loja>();
        String sql = "SELECT * FROM loja where nome ILIKE ?";
           PreparedStatement psm = Conexao.getPreparedStatement(sql);
           try {
               psm.setString(1, "%"+filtro+'%');
               ResultSet resultado = psm.executeQuery();
               
               while(resultado.next()) {
                   Loja obj = new Loja();
                   obj.setCodloja(resultado.getInt("codloja"));
                   obj.setNome(resultado.getString("nome"));
                   obj.setLogo(resultado.getBytes("logo"));
                   obj.setRecomendada(resultado.getBoolean("recomendacao"));
                   
                   lista.add(obj);
               }
               
           } catch(SQLException ex) {
               lista = null;
           }
           
        return lista;
    }
    
    public Boolean Excluir(Loja obj)
    {
        Boolean retorno = false;
        //MONTA A STRING DE EXCLUSÃO a partir da chave primária
        String sql = "DELETE FROM loja  WHERE codloja=?";
        PreparedStatement psm = Conexao.getPreparedStatement(sql);
        try {
            //PASSA A CHAVE PRIMÁRIA AO PARÂMETRO
            psm.setInt(1, obj.getCodloja());
            //EXECUTA A CONSULTA
            Integer resultado = psm.executeUpdate();
            if(resultado>0)
            {
                retorno = true; 
            }
            else
            {
                retorno = false;
            }
        } catch (SQLException ex) {
             System.out.println("BD: " + ex.getMessage());
        }
        return retorno;
    }
    public List<Loja> ListarLojaC() {
        List<Loja> lista = new ArrayList<Loja>();
        String sql = "SELECT * FROM loja WHERE recomendacao = true ORDER BY nome";
           PreparedStatement psm = Conexao.getPreparedStatement(sql);
           try {
               ResultSet resultado = psm.executeQuery();
               
               while(resultado.next()) {
                   Loja obj = new Loja();
                  obj.setCodloja(resultado.getInt("codloja"));
                   obj.setNome(resultado.getString("nome"));
                   obj.setLogo(resultado.getBytes("logo"));
                   obj.setRecomendada(resultado.getBoolean("recomendacao"));
                   lista.add(obj);
               }
               
           } catch(SQLException ex) {
               System.out.println("Erro ao acessar o banco" + ex.getMessage());
               lista = null;
           }
           
        return lista;
    }
    public List<Loja> ListarLojaD() {
        List<Loja> lista = new ArrayList<Loja>();
        String sql = "SELECT * FROM loja WHERE recomendacao = true ORDER BY nome DESC";
           PreparedStatement psm = Conexao.getPreparedStatement(sql);
           try {
               ResultSet resultado = psm.executeQuery();
               
               while(resultado.next()) {
                   Loja obj = new Loja();
                  obj.setCodloja(resultado.getInt("codloja"));
                   obj.setNome(resultado.getString("nome"));
                   obj.setLogo(resultado.getBytes("logo"));
                   obj.setRecomendada(resultado.getBoolean("recomendacao"));
                   lista.add(obj);
               }
               
           } catch(SQLException ex) {
               System.out.println("Erro ao acessar o banco" + ex.getMessage());
               lista = null;
           }
           
        return lista;
    }
}
